﻿using System;
using XSTDZ.ERP.Application.DataContracts;
using System.Collections.Generic;

namespace XSTDZ.ERP.Application
{
    /// <summary>
    /// 退货服务
    /// </summary>
    public interface IReturnBillService
    {
        #region 退货订单
        /// <summary>
        /// 添加退货任务单据
        /// </summary>
        /// <param name="returnBillDto"></param>
        Guid AddReturnBill(ReturnBillDto returnBillDto);
        /// <summary>
        /// 添加退货任务单据
        /// </summary>
        /// <param name="returnBillDto"></param>
        Guid AddReturnBill(ReturnBillDto returnBillDto, IEnumerable<ReturnBillDetailDto> returnBillDetailDtos);
        /// <summary>
        /// 添加退货任务单据
        /// </summary>
        /// <param name="returnBillDto"></param>
        Guid AddReturnBill(Guid returnBillId, IEnumerable<ReturnBillDetailDto> returnBillDetailDtos);
        void UpdateReturnBill(ReturnBillDto returnBillDto);
        void UpdateReturnBill(Guid returnBillId, IEnumerable<ReturnBillDetailDto> returnBillDetailDtos);
        Guid UpdateReturnBill(ReturnBillDto returnBillDto, IEnumerable<ReturnBillDetailDto> returnBillDetailDtos);

        void ConvertReturnBillDeleteState(Guid returnBillId);
        void ConvertReturnBillDeleteState(Guid returnBillId, IEnumerable<Guid> returnBillDetailIds);

        ReturnBillDto GetReturnBill(Guid returnBillId);
        IEnumerable<ReturnBillDto> GetReturnBills(int pageIndex, int pageSize);

        //把生成的盘点单数据更新至库存，会影响库存
        void UpdateToStock(Guid returnBillId, IEnumerable<Guid> profitAndLossBillDetailIds);
        //审核
        void Audit(Guid returnBillId, Guid UserID, string minProductInNo, int len, bool isChengDu, Guid wareHourseId);
        /// <summary>
        /// 确认(会更新库存)
        /// </summary>
        /// <param name="returnBillId"></param>
        void Confirm(Guid returnBillId, Guid UserID);
        #endregion
        #region 退货订单明细
        void AddReturnBillDetail(Guid returnBillId, ReturnBillDetailDto productCheckBillDetailDto);
        void UpdateReturnBillDetail(Guid returnBillId, IEnumerable<ReturnBillDetailDto> returnBillDetailDtos);
        ReturnBillDetailDto GetReturnBillDetail(Guid productCheckBillDetailId);
        IEnumerable<ReturnBillDetailDto> GetReturnBillDetails(Guid returnBillId);

        #endregion
        #region 其它
        /// <summary>
        /// 获得当前退货单单号的最大单号
        /// </summary>
        /// <returns></returns>
        string GetMaxBillNo();
        #endregion
    }
}
